package routers

import (
	"github.com/gin-gonic/gin"
	"net/http"
	"woo-server/controllers/V1/Admin/content"
	"woo-server/controllers/V1/Admin/member"
	"woo-server/controllers/V1/Admin/module"
	"woo-server/controllers/V1/Admin/product"
	"woo-server/controllers/V1/Admin/public"
	"woo-server/controllers/V1/Admin/system"
	"woo-server/routers/middlewares"

	swaggerFiles "github.com/swaggo/files"
	ginSwagger "github.com/swaggo/gin-swagger"
	CController "woo-server/controllers"

	_ "woo-server/docs"
)

/** ---------RouterBindings 对请求进行分组管理，各组可以采用不同的中间件进行数据校验，权限验证---------- */
func RouterBindings(router *gin.Engine) {
	/**--------------避免返回请求404----------*/
	router.GET("/favicon.ico", func(context *gin.Context) {
		context.String(http.StatusOK, "")
	})

	/** -------------------------swagger接口文档 /docs/index.html---------------------------- */
	url := ginSwagger.URL("/docs/doc.json")
	router.GET("/docs/*any", ginSwagger.WrapHandler(swaggerFiles.Handler, url))

	/** -------------------------API根路由---------------------------- */
	baseRouter := router.Group("/api")
	{

		baseRouter.GET("/Member/SendMail", member.SendMail) // 会员配置项
		/** -------------------------PUBLIC(公用)---------------------------- */
		baseRouter.GET("/public/login", public.Login)                    // 登录
		baseRouter.GET("/public/getCaptcha", public.Captcha)             // 验证码
		baseRouter.GET("/public/getConfiguration", public.Configuration) // 获取页面配置项
		baseRouter.GET("/ConnectionTest", CController.ConnectionTest)    // 测试
		baseRouter.GET("/File/ShowImage", content.ShowImage)             //显示图片接口

		/** -------------------------需要登录权限------------------------------------------ */
		baseRouter.Use(middlewares.CheckAuthSignature())
		{
			/** -------------------------PUBLIC(登录公用)---------------------------- */
			baseRouter.GET("/User/GetLoginUserInfo", system.LoginUserInfo)    // 获取登录人信息
			baseRouter.GET("/User/ReloadRole", system.ReloadRole)             // 刷新权限
			baseRouter.GET("/User/Logout", public.Logout)                     // 退出登录
			baseRouter.POST("/File/OnlyUploadImage", content.OnlyUploadImage) // 上传图片
			baseRouter.GET("/User/UserConfig", system.UserConfig)             // 用户配置
			baseRouter.POST("/User/UpdateUserInfo", system.UpdateUserInfo)    // 个人资料修改

			/** -------------------------CheckAuthRole(检查访问权限)---------------------------- */
			baseRouter.Use(middlewares.CheckAuthRole()) //权限校验
			{
				/** -------------------------MEMBER(会员管理)---------------------------- */
				/**----会员管理(后台)----*/
				baseRouter.GET("/Member/List", member.UserList)      // 会员列表
				baseRouter.POST("/Member/Save", member.UserStatus)   // 会员修改/新增
				baseRouter.POST("/Member/Delete", member.UserDelete) // 会员删除
				baseRouter.GET("/Member/Config", member.UserConfig)  // 会员配置项
				/**----会员等级(后台)----*/
				baseRouter.GET("/Member/GradeList", member.GradeList)      // 等级列表
				baseRouter.POST("/Member/GradeSave", member.GradeSave)     // 等级修改/新增
				baseRouter.POST("/Member/GradeDelete", member.GradeDelete) // 等级删除
				baseRouter.GET("/Member/GradeConfig", member.GradeConfig)  // 等级配置项
				/** -------------------------SYSTEM(系统管理)---------------------------- */
				/**-----系统菜单(后台)-----*/
				baseRouter.GET("/Menu/List", system.MenuList)         // 菜单列表
				baseRouter.GET("/Menu/MenuConfig", system.MenuConfig) // 菜单列表配置项
				baseRouter.POST("/Menu/Save", system.MenuSave)        // 菜单修改/新增
				baseRouter.POST("/Menu/Delete", system.MenuDelete)    // 菜单删除
				/**----系统管理员(后台)----*/
				baseRouter.GET("/Management/List", system.UserList)      // 管理员列表
				baseRouter.POST("/Management/Save", system.UserSave)     // 管理员修改/新增
				baseRouter.POST("/Management/Delete", system.UserDelete) // 管理员删除
				/**----系统角色(后台)----*/
				baseRouter.GET("/Role/List", system.RoleList)      // 角色列表
				baseRouter.POST("/Role/Save", system.RoleSave)     // 角色修改/新增
				baseRouter.POST("/Role/Delete", system.RoleDelete) // 角色删除
				baseRouter.GET("/Role/Config", system.RoleConfig)  // 角色列表配置项

				/** -------------------------MODULE(模块管理)---------------------------- */
				/**-------自由块管理-------*/
				baseRouter.GET("/FreeBlock/List", module.FreeBlockList)      // 自由块列表
				baseRouter.POST("/FreeBlock/Save", module.FreeBlockSave)     // 自由块修改/新增
				baseRouter.POST("/FreeBlock/Delete", module.FreeBlockDelete) // 自由块删除
				baseRouter.GET("/FreeBlock/Config", module.FreeBlockConfig)  // 自由块列表配置项

				/** -------------------------CONTENT(内容管理)---------------------------- */
				/**------文件管理------*/
				baseRouter.GET("/File/List", content.UploadFileList) // 上传文件列表
				/**----文件分组管理----*/
				baseRouter.GET("/File/Group/All-List", content.AllFileGroupList) // 文件分组列表(图库使用)
				baseRouter.GET("/File/Group/List", content.FileGroupList)        // 文件分组列表(分页)
				baseRouter.GET("/File/Group/Save", content.AddFileGroup)         // 新增文件分组
				baseRouter.GET("/File/Group/Config", content.FileGroupConfig)    // 文件分组配置
				baseRouter.POST("/File/Group/Delete", content.Delete)            // 文件分组删除
				/**-------文章-------*/
				baseRouter.GET("/Article/List", content.ArticleList)      // 文章列表
				baseRouter.POST("/Article/Save", content.ArticleSave)     // 文章修改/新增
				baseRouter.POST("/Article/Delete", content.ArticleDelete) // 文章删除
				baseRouter.GET("/Article/Config", content.ArticleConfig)  // 文章列表配置项
				/**-----文章分类-----*/
				baseRouter.GET("/ArticleCategory/List", content.ArticleCategoryList)      // 文章分类列表
				baseRouter.GET("/ArticleCategory/Save", content.ArticleCategorySave)      // 文章分类修改/新增
				baseRouter.POST("/ArticleCategory/Delete", content.ArticleCategoryDelete) // 文章分类删除
				baseRouter.GET("/ArticleCategory/Config", content.ArticleCategoryConfig)  // 文章分类列表配置项

				/** -------------------------PRODUCT(商品管理)---------------------------- */
				/**-------商品-------*/
				baseRouter.GET("/Product/List", product.ProductList)      // 商品列表
				baseRouter.POST("/Product/Save", product.ProductSave)     // 商品修改/新增
				baseRouter.POST("/Product/Delete", product.ProductDelete) // 商品删除
				baseRouter.GET("/Product/Config", product.ProductConfig)  // 商品列表配置项
				/**-----商品分类-----*/
				baseRouter.GET("/ProductCategory/List", product.List)      // 商品分类列表
				baseRouter.GET("/ProductCategory/Save", product.Save)      // 商品分类修改/新增
				baseRouter.POST("/ProductCategory/Delete", product.Delete) // 商品分类删除
				baseRouter.GET("/ProductCategory/Config", product.Config)  // 商品分类列表配置项
			}

		}
	}

}
